package objetos;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.util.ArrayList;





public class VerificaModoEvento extends Sprite{

	public double x;
	public double y;

	BufferedImage imagemEvento = null;
	int charx = 6;
	int chary = 1;

	int frame = 0;
	int anim = 1;
	int animspd = 100;
	int somatimeanim = 0;
	boolean colideCaixa = false;
	int modoEventoInicial = 0;
	
	public double oldX;

	int objx, objy; //obj que colidiu grava o x e y da plataforma que colidiu com o obj 2 funcao verificaColicaoRetangular

	public boolean direita = true, esquerda = false, iniciar = true, start = false;;

	public long duracaoMovimento;

	ArrayList<VerificaModoEvento> listaVerificaEventos = new ArrayList<VerificaModoEvento>();

	ArrayList<Boolean> verificaColicoes = new ArrayList<Boolean>();

	int evento;
	int modoEvento; // ativo ou inativo


	boolean colidiu = false;

	BufferedImage imagem;

	public boolean debug = false;
	
	public int contagemRegressivaEvento = 0; // evento4

	public VerificaModoEvento() {
          
	}

	public void addEvento(double x, double y, int evento, int modoEvento){
		VerificaModoEvento novoEvento = new VerificaModoEvento();
		novoEvento.x = x;
		novoEvento.y = y;
		novoEvento.evento = evento;
		novoEvento.modoEvento = modoEvento;
		novoEvento.modoEventoInicial = modoEvento;
		
		if(evento == 4){
			novoEvento.contagemRegressivaEvento = 100;	// evento4
		}
		//novoEvento.imagem = CanvasGame.instance.plataformaImagem;

		listaVerificaEventos.add(novoEvento);

		novoEvento = null;
	}



	@Override
	public void SimulaSe(long diftime) {

		//System.out.println("listaVerificaEventos.size() = "+listaVerificaEventos.size());

		somatimeanim += diftime;
		//frame = (somatimeanim / animspd) % 3;
	
		for (int i = 0; i < listaVerificaEventos.size(); i++) {
			
			if(listaVerificaEventos.get(i).modoEvento >= 0){
			
			if(CanvasGame.instance.boxPush.checaEvento(listaVerificaEventos.get(i).x, listaVerificaEventos.get(i).y)){
//				listaVerificaEventos.get(i).modoEvento = 1;
				listaVerificaEventos.get(i).colideCaixa = true;
			}else{
//				listaVerificaEventos.get(i).modoEvento = -1;
				listaVerificaEventos.get(i).colideCaixa = false;
			}
			
			
//				for (int j = 0; j < CanvasGame.instance.gerenciaPlataformaMovimentoVertical.listaPlataformaVertical.size(); j++) {
//					if(listaVerificaEventos.get(i).evento == CanvasGame.instance.gerenciaPlataformaMovimentoVertical.listaPlataformaVertical.get(j).evento){
//						CanvasGame.instance.gerenciaPlataformaMovimentoVertical.listaPlataformaVertical.get(j).modoEvento = 1;
//					}
//				}
			
			for (int j = 0; j < CanvasGame.instance.gerenciaPlataformaMovimentoVertical.listaPlataformaVertical.size(); j++) {
				for(int g = 0; g < listaVerificaEventos.size(); g++){
					if(listaVerificaEventos.get(g).evento == CanvasGame.instance.gerenciaPlataformaMovimentoVertical.listaPlataformaVertical.get(j).evento){
						if(listaVerificaEventos.get(g).colideCaixa){
							CanvasGame.instance.gerenciaPlataformaMovimentoVertical.listaPlataformaVertical.get(j).modoEvento = 1;
						}else{
							//System.out.println("teste");
							CanvasGame.instance.gerenciaPlataformaMovimentoVertical.listaPlataformaVertical.get(j).modoEvento = -1;
							break;
						}							
					}
				}
			}
			
			for (int j = 0; j < CanvasGame.instance.gerenciaPlataformaMovimentoHorizontal.listaPlataformaHorizontal.size(); j++) {
				for(int g = 0; g < listaVerificaEventos.size(); g++){
					if(listaVerificaEventos.get(g).evento == CanvasGame.instance.gerenciaPlataformaMovimentoHorizontal.listaPlataformaHorizontal.get(j).evento){
						if(listaVerificaEventos.get(g).colideCaixa){
							CanvasGame.instance.gerenciaPlataformaMovimentoHorizontal.listaPlataformaHorizontal.get(j).modoEvento = 1;
						}else{
							//System.out.println("teste");
							CanvasGame.instance.gerenciaPlataformaMovimentoHorizontal.listaPlataformaHorizontal.get(j).modoEvento = -1;
							break;
						}							
					}
				}
			}
			
			
			for (int j = 0; j < CanvasGame.instance.gerenciaInimigo.ListaInimigo.size(); j++) {
				
				//System.out.println("\n VerificaModoEvento::Simulase:: gerenciaInimigo.ListaInimigo.get(j).evento >> "+CanvasGame.instance.gerenciaInimigo.ListaInimigo.get(j).evento+"");
				
				
				for(int g = 0; g < listaVerificaEventos.size(); g++){
					
					
					if(listaVerificaEventos.get(g).evento == CanvasGame.instance.gerenciaInimigo.ListaInimigo.get(j).evento){
						if(listaVerificaEventos.get(g).colideCaixa){
							CanvasGame.instance.gerenciaInimigo.ListaInimigo.get(j).modoEvento = 1;
						}else{
							//System.out.println("teste");
							CanvasGame.instance.gerenciaInimigo.ListaInimigo.get(j).modoEvento = -1;
							break;
						}							
					}
				}
			}
			
			
			for(int g = 0; g < listaVerificaEventos.size(); g++){ // se ponto chegada for um evento faz isso
				if(listaVerificaEventos.get(g).evento == CanvasGame.instance.pontoChegada.evento){
					if(listaVerificaEventos.get(g).colideCaixa){
						CanvasGame.instance.pontoChegada.modoEvento = 1;
					}else{
						//System.out.println("teste");
						CanvasGame.instance.pontoChegada.modoEvento = -1;
						break;
					}							
				}
			}
	
				
			//	for (int j = 0; j < CanvasGame.instance.gerenciaPlataformaMovimentoHorizontal.listaPlataformaHorizontal.size(); j++) {
//			//		for(int g = 0; g < listaVerificaEventos.size(); g++){
//						if(listaVerificaEventos.get(g).evento == CanvasGame.instance.gerenciaPlataformaMovimentoHorizontal.listaPlataformaHorizontal.get(j).evento){
//							if(listaVerificaEventos.get(g).colideCaixa){
//								CanvasGame.instance.gerenciaPlataformaMovimentoHorizontal.listaPlataformaHorizontal.get(j).modoEvento = 1;
//							}else{
//								System.out.println("teste");
//								CanvasGame.instance.gerenciaPlataformaMovimentoHorizontal.listaPlataformaHorizontal.get(j).modoEvento = -1;
//								break;
//							}							
//						}
//					}
//				}
//								
				
			}
			
		}
		
		/*for (int i = 0; i < listaVerificaEventos.size(); i++) {
			if(listaVerificaEventos.get(i).evento == 4 && listaVerificaEventos.get(i).modoEvento > 0){
				if(listaVerificaEventos.get(i).contagemRegressivaEvento > 0){
					listaVerificaEventos.get(i).contagemRegressivaEvento -= diftime / 1000.0f;
				}else{
					listaVerificaEventos.get(i).colideCaixa = false;
					
				}
			}
		}
		*/	
			
		for (int i = 0; i < listaVerificaEventos.size(); i++) {
			if(listaVerificaEventos.get(i).evento == 4 && listaVerificaEventos.get(i).modoEvento > 0){
				if(listaVerificaEventos.get(i).contagemRegressivaEvento > 0){
					listaVerificaEventos.get(i).contagemRegressivaEvento -= diftime / 1000.0f;
				}else{
					listaVerificaEventos.get(i).colideCaixa = false;
					
				}
			}
		}
			
			
		for (int i = 0; i < listaVerificaEventos.size(); i++) {
			if(listaVerificaEventos.get(i).colideCaixa){
				for (int j = 0; j < listaVerificaEventos.size(); j++) {
					if(listaVerificaEventos.get(i).evento == listaVerificaEventos.get(j).evento){
						listaVerificaEventos.get(j).modoEvento = 1;
//						listaVerificaEventos.get(j).colideCaixa = true;
					}
				}
			}else if((listaVerificaEventos.get(i).modoEventoInicial <= 0)){
				listaVerificaEventos.get(i).modoEvento = -1;
				listaVerificaEventos.get(i).colideCaixa = false;
			}
		}
		

			
		
	}

	

	@Override
	public void DesenhaSe(Graphics2D dbg, int mapx, int mapy) {


		for (int i = 0; i < listaVerificaEventos.size(); i++) {	

			if(listaVerificaEventos.get(i).colideCaixa){
				//dbg.setColor(Color.RED);
			//	dbg.fillRect((int) (listaVerificaEventos.get(i).x - mapx), (int) (listaVerificaEventos.get(i).y - mapy), (int) (20), (int) (20));

				if(listaVerificaEventos.get(i).modoEvento >= 0){
//					if(listaVerificaEventos.get(i).evento == 1){
						dbg.drawImage(CanvasGame.instance.eventoOnImg, null , (int)(listaVerificaEventos.get(i).x - mapx),(int)(listaVerificaEventos.get(i).y - mapy - 90));
//					}else{
//						if(listaVerificaEventos.get(i).evento == 2){
//							dbg.drawImage(CanvasGame.instance.evento2OnImg, null , (int)(listaVerificaEventos.get(i).x - mapx),(int)(listaVerificaEventos.get(i).y - mapy - 90));
//						}else{
//							if(listaVerificaEventos.get(i).evento == 3){
//								dbg.drawImage(CanvasGame.instance.evento3OnImg, null , (int)(listaVerificaEventos.get(i).x - mapx),(int)(listaVerificaEventos.get(i).y - mapy - 90));
//							}
//						}
//					}
//					
//					if(listaVerificaEventos.get(i).evento ==4){
//						dbg.drawImage(CanvasGame.instance.eventoOnImg, null , (int)(listaVerificaEventos.get(i).x - mapx),(int)(listaVerificaEventos.get(i).y - mapy - 90));
//					}
//					
//					if(listaVerificaEventos.get(i).evento >=5){
//						dbg.drawImage(CanvasGame.instance.eventoOnImg, null , (int)(listaVerificaEventos.get(i).x - mapx),(int)(listaVerificaEventos.get(i).y - mapy - 90));
//					}
//					
				}
			//dbg.drawImage(imagemEvento, (int) listaVerificaEventos.get(i).x - mapx, (int) listaVerificaEventos.get(i).y - mapy, (int) (listaVerificaEventos.get(i).x + 60)
			//		- mapx, (int) (listaVerificaEventos.get(i).y + 100) - mapy, 60 * frame + charx * 360, 100
			//		* anim + chary * 1, 60 * frame + 60 + charx * 360, 100 * anim
			//		+ 100 + chary * 1, null);
			}else{
				
				if(listaVerificaEventos.get(i).modoEvento >= 0){
//					if(listaVerificaEventos.get(i).evento == 1){
						dbg.drawImage(CanvasGame.instance.eventoOffImg, null , (int)(listaVerificaEventos.get(i).x - mapx),(int)(listaVerificaEventos.get(i).y - mapy - 90));
//					}else{
//						if(listaVerificaEventos.get(i).evento == 2){
//							dbg.drawImage(CanvasGame.instance.evento2OffImg, null , (int)(listaVerificaEventos.get(i).x - mapx),(int)(listaVerificaEventos.get(i).y - mapy - 90));
//						}else{
//							if(listaVerificaEventos.get(i).evento == 3){
//								dbg.drawImage(CanvasGame.instance.evento3OffImg, null , (int)(listaVerificaEventos.get(i).x - mapx),(int)(listaVerificaEventos.get(i).y - mapy - 90));
//							}
//						}
//						
//						if(listaVerificaEventos.get(i).evento ==4){
//							dbg.drawImage(CanvasGame.instance.eventoOffImg, null , (int)(listaVerificaEventos.get(i).x - mapx),(int)(listaVerificaEventos.get(i).y - mapy - 90));
//						}
//						
//						if(listaVerificaEventos.get(i).evento >=5){
//							dbg.drawImage(CanvasGame.instance.eventoOffImg, null , (int)(listaVerificaEventos.get(i).x - mapx),(int)(listaVerificaEventos.get(i).y - mapy - 90));
//						}
//						
//						
//					}
//					
				}
			}
		}

	}

	public boolean colisaoRetangular(Heroi p) {

		int cont = 0;

		for (int i = 0; i < listaVerificaEventos.size(); i++) {	

			colidiu = true;	

			if (p.X + 32 < listaVerificaEventos.get(i).x) {
				colidiu = false;
			}
			if (p.X > listaVerificaEventos.get(i).x + 108) {
				colidiu = false;
			}
			if (p.Y + 48 < listaVerificaEventos.get(i).y) {
				colidiu = false;
			}
			if (p.Y > listaVerificaEventos.get(i).y -5) {
				colidiu = false;
			}


			if(colidiu == true){

				y = listaVerificaEventos.get(i).y;
				return true;
			}

			cont++;

		}



		if(colidiu == false){
			return false;
		}else{
			return true;

		}

	}



	public boolean colisaoRetangular(double x, double y) {

		int cont =0;
		boolean colidiu2 = true;

		for (int i = 0; i < listaVerificaEventos.size(); i++) {	

			colidiu2 = true;	

			if (x + 40 < listaVerificaEventos.get(i).x) {
				colidiu2 = false;
			}
			if (x > listaVerificaEventos.get(i).x + 20) {
				colidiu2 = false;
			}
			if (y + 40 < listaVerificaEventos.get(i).y) {
				colidiu2 = false;
			}
			if (y > listaVerificaEventos.get(i).y +20) {
				colidiu2 = false;
			}


			if(colidiu2 == true){

				objy = (int) listaVerificaEventos.get(i).y;
				return true;
			}

			cont++;

		}

		if(colidiu2 == false){
			return false;
		}else{
			return true;

		}

	}





}
